﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Servicios.Data.Model;
using Servicios.Business.Proveedores;

namespace Servicios.Business.Modulos
{
    public class Registro
    {
        /// <summary>
        /// Registro de Nuevo Material Bibliográfico
        /// </summary>
        /// <param name="mb"></param>
        /// <param name="tipoMatBibId"></param>
        /// <param name="paisId"></param>
        /// <param name="idiomaId"></param>
        /// <param name="editorialId"></param>
        /// <param name="autores"></param>
        public static void RegistrarMaterialBibliografico(MaterialBibliografico mb, int tipoMatBibId, int? paisId, int? idiomaId, int? editorialId, params Autor[] autores)
        {
            MaterialBibliograficoProvider mbp = new MaterialBibliograficoProvider();
            mb.Bib_TipoMaterialBibliografico =
                new TipoMatBibliograficoProvider { Context = mbp.Context }.GetById(tipoMatBibId);
            mb.Bib_Idioma = idiomaId.HasValue ? new IdiomaProvider { Context = mbp.Context }.GetById(idiomaId.Value) : null;
            mb.Bib_Pais = paisId.HasValue ? new PaisProvider { Context = mbp.Context }.GetById(paisId.Value) : null;
            mb.Bib_Editorial = editorialId.HasValue ? new EditorialProvider { Context = mbp.Context }.GetById(editorialId.Value) : null;
            mbp.Insert(mb);
            mbp.AnexarAutores(mb, autores);
        }
        
        /// <summary>
        /// Registro de Nuevo Material Bibliográfico
        /// </summary>
        /// <param name="mb"></param>
        /// <param name="tipoMatBibId"></param>
        /// <param name="paisId"></param>
        /// <param name="idiomaId"></param>
        /// <param name="editorialId"></param>
        /// <param name="autoresId"></param>
        public static void RegistrarMaterialBibliografico(MaterialBibliografico mb, int tipoMatBibId, int? paisId, int? idiomaId, int? editorialId, params int[] autoresId)
        {
            List<Autor> autores = new List<Autor>();
            AutorProvider aup = new AutorProvider();
            for (int i = 0; i < autoresId.Length; i++)
            {
                autores.Add(aup.GetById(autoresId[i]));
            }
            RegistrarMaterialBibliografico(mb, tipoMatBibId, paisId, idiomaId, editorialId, autores.ToArray());
        }

        public static void RegistrarExistencia(MaterialBibliografico mb, Existencias_por_MatBib existencia, int tipoPrestamoId)
        {
            RegistrarExistencia(mb.ID, existencia, tipoPrestamoId);
        }

        /// <summary>
        /// Registro de nueva existencia de un material bibliografico
        /// </summary>
        /// <param name="mbId"></param>
        /// <param name="existencia"></param>
        /// <param name="tipoPrestamoId"></param>
        public static void RegistrarExistencia(int mbId, Existencias_por_MatBib existencia, int tipoPrestamoId)
        {
            ExistenciasProvider exp = new ExistenciasProvider();
            var mbe = new MaterialBibliograficoProvider { Context = exp.Context }.GetById(mbId);
            existencia.Bib_MaterialBibliografico = mbe;
            existencia.Bib_TipoPrestamo = new TipoPrestamoProvider { Context = exp.Context }.GetById(tipoPrestamoId);
            exp.Insert(existencia);
        }

        /// <summary>
        /// Registro de nuevas existencias, por defecto habilitadas
        /// </summary>
        /// <param name="mbId"></param>
        /// <param name="existencias"></param>
        public static void RegistrarExistencias(int mbId, params Existencias_por_MatBib[] existencias)
        {
            for (int i = 0; i < existencias.Length; i++)
            {
                RegistrarExistencia(mbId, existencias[i], 1);
            }
        }

        /// <summary>
        /// Registro de nuevas existencias, por defecto habilitadas
        /// </summary>
        /// <param name="mb"></param>
        /// <param name="existencias"></param>
        public static void RegistrarExistencias(MaterialBibliografico mb, params Existencias_por_MatBib[] existencias)
        {
            for (int i = 0; i < existencias.Length; i++)
            {
                RegistrarExistencia(mb, existencias[i], 1);
            }
        }

    }
}
